home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / EDUCATE / TIERATXT.ARJ / TIERRA2.DOC < prev   
Text File  |  1991-11-05  |  53KB  |  1,020 lines

  1.  
  2.                                  O /
  3. ================================= x -------------------------------------
  4.                  o \
  5.  
  6. \LP
  7. \bf 3.3 ECOLOGY\rm
  8. \eLP
  9.  
  10. The only communities whose ecology has been explored in detail are those
  11. that operate under selection for small sizes.  These communities generally
  12. include a large number of parasites, which do not have functional copy
  13. procedures, and which execute the copy procedures of other creatures within
  14. the search limit.  In exploring ecological interactions, the mutation rate
  15. is set at zero, which effectively throws the simulation into ecological time
  16. by stopping evolution.  When parasites are present, it is also necessary
  17. to stipulate that creatures must breed true, since parasites have a tendency
  18. to scramble genomes, leading to evolution in the absence of mutation.
  19.  
  20. 0045aaa is a ``metabolic parasite''.  Its genome does not include the
  21. copy procedure, however it executes the copy procedure code of
  22. a normal host, such as the ancestor.  In an environment favoring small
  23. creatures, 0045aaa has a competitive advantage over the ancestor, however, the
  24. relationship is density dependent.  When the hosts become scarce, most of
  25. the parasites are not within the search limit of a copy procedure, and are
  26. not able to reproduce.  Their calls to the copy procedure fail and generate
  27. errors, causing them to rise to the top of the reaper queue and die.
  28. When the parasites die off, the host population rebounds.  Hosts and parasites
  29. cultured together demonstrate Lotka-Volterra population cycling (Lotka [25];
  30. Volterra [35]; Wilson \& Bossert [36]).
  31.  
  32. A number of experiments have been conducted to explore the factors affecting
  33. diversity of size classes in these communities.  Competitive exclusion trials
  34. were conducted with a series of self-replicating (non-parasitic) genotypes
  35. of different size classes.  The experimental soups were initially inoculated
  36. with one individual of each size.  A genotype of size 79 was tested against a
  37. genotype of size 80, and then against successively larger size classes.  The
  38. interactions were observed by plotting the population of the size 79 class
  39. on the $x$ axis, and the population of the other size class on the $y$ axis.
  40. Sizes 79 and 80 were found to be competitively matched such that neither was
  41. eliminated from the soup.  They quickly entered a stable cycle, which exactly
  42. repeated a small orbit.  The same general pattern was found in the interaction
  43. between sizes 79 and 81.
  44.  
  45. When size 79 was tested against size 82, they initially entered a stable
  46. cycle, but after about 4 million instructions they shook out of stability
  47. and the trajectory became chaotic with an attractor that was symmetric about
  48. the diagonal (neither size showed any advantage).  This pattern was repeated
  49. for the next several size classes, until size 90, where a marked asymmetry of
  50. the chaotic attractor was evident, favoring size 79.  The run of size 79
  51. against size 93 showed a brief stable period of about a million instructions,
  52. which then moved to a chaotic phase without an attractor, which spiraled
  53. slowly down until size 93 became extinct, after an elapsed time of about 6
  54. million instructions.
  55.  
  56. An interesting exception to this pattern was the interaction between size 79
  57. and size 89.  Size 89 is considered to be a ``metabolic cripple'', because
  58. although it is capable of self-replicating, it executes about 40\% more
  59. instructions than normal to replicate.  It was eliminated in competition
  60. with size 79, with no loops in the trajectory, after an elapsed time of
  61. under one million instructions.
  62.  
  63. In an experiment to determine the effects of the presence of parasites on
  64. community diversity, a community consisting of twenty size classes of hosts
  65. was created and allowed to run for 30 million instructions, at which time only
  66. the eight smallest size classes remained.  The same community was then
  67. regenerated, but a single genotype (0045aaa) of parasite was also introduced.
  68. After 30 million instructions, 16 size classes remained, including the
  69. parasite.  This seems to be an example of a ``keystone'' parasite effect
  70. (Paine [28]).
  71.  
  72. Symbiotic relationships are also possible.  The ancestor was manually dissected
  73. into two creatures, one of size 46 which contained only the code for
  74. self-examination and the copy loop, and one of size 64 which contained only
  75. the code for self-examination and the copy procedure (Figure 3).  Neither
  76. could replicate when cultured alone, but when cultured together, they both
  77. replicated, forming a stable mutualistic relationship.  It is not known if
  78. such relationships have evolved spontaneously.
  79.  
  80. \LP
  81. \bf 3.4 EVOLUTIONARY OPTIMIZATION\rm
  82. \eLP
  83.  
  84. In order to compare the process of evolution between runs of the simulator,
  85. a simple objective quantitative measure of evolution is needed.  One such
  86. measure is the degree to which creatures improve their efficiency through
  87. evolution.  This provides not only an objective measure of progress in
  88. evolution, but also sheds light on the potential application of synthetic
  89. life systems to the problem of the optimization of machine code.
  90.  
  91. The efficiency of the creature can be indexed in two ways: the size of the
  92. genome, and the number of CPU cycles needed to execute one replication.
  93. Clearly, smaller genomes can be replicated with less CPU time, however,
  94. during evolution, creatures also decrease the ratio of instructions executed
  95. in one replication, to genome size.  The number of instructions executed per
  96. instruction copied, drops substantially.
  97.  
  98. Figure 4 shows the changes in genome size over a time period of 500 million
  99. instructions executed by the system, for eight sets of mutation rates
  100. differing by factors of two.  Mutation rates are measured in terms of 1 in
  101. N individuals being affected by a mutation in each generation.  At the highest
  102. two sets of rates tested, one and two, either each (one) or one-half (two)
  103. of the individuals are hit by mutation in each generation.  At these rates
  104. the system is unstable.  The genomes melt under the heat of the high mutation
  105. rates.  The community often dies out, although some runs survived the 500
  106. million instruction runs used in this study.  The next lower rate, four,
  107. yields the highest rate of optimization without the risk of death of the
  108. community.  At the five lower mutation rates, 8, 16, 32, 64 and 128,
  109. we see successively lower rates of optimization.
  110.  
  111. Additional replicates were made of the runs at the mutation rate of four
  112. (Fig.\ 5).  The replicates differ only in the seed of the
  113. random number generator, all other parameters being identical.  These runs
  114. vary in some details such as whether progress is continuous and gradual, or
  115. comes in bursts.  Also, each run decreases to a size limit which it can not
  116. proceed past even if it is allowed to run much longer.  However, different
  117. runs reach different plateaus of efficiency.  The smallest limiting genome
  118. size seen has been 22 instructions, while other runs reached limits of 27
  119. and 30 instructions.  Evidently, the system can reach a local optima from
  120. which it can not easily evolve to the global optima.
  121.  
  122. The increase in efficiency of the replicating algorithms is even greater than
  123. the decrease in the size of the code.  The ancestor is 80 instructions
  124. long and requires 839 CPU cycles to replicate.  The creature of size 22
  125. only requires 146 CPU cycles to replicate, a 5.75--fold difference in
  126. efficiency.  The algorithm of one of these creatures is listed in Appendix D.
  127.  
  128. Although optimization of the algorithm is maximized at the highest mutation
  129. rate that does not cause instability, ecological interactions appear to be
  130. richer at slightly lower mutation rates.  At the rates of eight or 16, we
  131. find the diversity of coexisting size classes to be the greatest, and to
  132. persist the longest.  The smaller size classes tend to be various forms of
  133. parasites, thus a diversity of size classes indicates a rich ecology.
  134.  
  135. An example of even greater optimization is illustrated in Appendix E and
  136. discussed above in section 3.1.1.8.  Unrolling of the loop results in a
  137. loop which uses 18 CPU cycles to copy three instructions, or six CPU
  138. cycles executed per instruction copied, compared to 10 for the ancestor.
  139. The creature of size 22 also uses six CPU cycles per instruction copied.
  140. However, the creature of Appendix E uses three extra CPU cycles per loop
  141. to compensate for a separate adaptation that allows it to double its share
  142. of CPU time from the global pool (in essence meaning that relatively speaking,
  143. it uses only three CPU cycles per instruction copied).  Without this
  144. compensation it would use only five CPU cycles per instruction copied.
  145.  
  146. \LP
  147. \rule[6pt]{6.5in}{1pt}
  148. \large \bf 4 SUMMARY\rm \normalsize
  149. \eLP
  150.  
  151. \LP
  152. \bf 4.1 GENERAL BEHAVIOR OF THE SYSTEM\rm
  153. \eLP
  154.  
  155. Once the soup is full of replicating creatures, individuals are initially
  156. short lived, generally reproducing only once before dying, thus individuals
  157. turn over very rapidly.  More slowly, there appear new genotypes of size 80,
  158. and then new size classes.  There are changes in the genetic composition
  159. of each size class, as new mutants appear, some of which increase significantly
  160. in frequency, eventually replacing the original genotype.  The size classes
  161. which dominate the community also change through time, as new size classes
  162. appear, some of which competitively exclude sizes present earlier.
  163. Once the community becomes diverse, there is a greater variance in
  164. the longevity and fecundity of individuals.
  165.  
  166. In addition to an increase in the raw diversity of genotypes and genome sizes,
  167. there is an increase in the ecological diversity.  Obligate commensal
  168. parasites evolve, which are not capable of self-replication in isolated
  169. culture, but which can replicate when cultured with normal (self-replicating)
  170. creatures.  These parasites execute some parts of the code of their hosts,
  171. but cause them no direct harm, except as competitors.  Some potential hosts
  172. have evolved immunity to the parasites, and some parasites have evolved to
  173. circumvent this immunity.
  174.  
  175. In addition, facultative hyper-parasites have evolved, which can
  176. self-replicate in isolated culture, but when subjected to parasitism, subvert
  177. the parasites energy metabolism to augment their own reproduction.
  178. Hyper-parasites drive parasites to extinction, resulting in complete
  179. domination of the communities.  The relatively high degrees of genetic
  180. relatedness within the hyper-parasite dominated communities leads to the
  181. evolution of sociality in the sense of creatures that can only replicate
  182. when they occur in aggregations.  These social aggregations are then invaded
  183. by hyper-hyper-parasite cheaters.
  184.  
  185. Mutations and the ensuing replication errors lead to an increasing diversity
  186. of sizes and genotypes of self-replicating creatures in the soup.  Within
  187. the first 100 million instructions of elapsed time, the soup evolves to
  188. a state in which about a dozen more-or-less persistent size classes coexist.
  189. The relative abundances and specific list of the size classes varies over time.
  190. Each size class consists of a number of distinct genotypes which also vary
  191. over time.
  192.  
  193. The rate of evolution increases with the mutation rate until the system
  194. becomes unstable, and the community dies at rates above one mutation per four
  195. generations.  Ecological interactions are richer and more sustained at
  196. slightly lower rates, one mutation per eight or 16 generations.  At mutation
  197. rates of one per four generations, under selection for small sizes, creatures
  198. will optimize to a genome size in the 22 to 30 instruction size range within
  199. as little as 300 million instructions of elapsed time.  Each of these runs
  200. will reach a local optima which it evidently cannot escape from, although it
  201. may not be the global optima.
  202.  
  203. \LP
  204. \bf 4.2 INCREASING COMPLEXITY\rm
  205. \eLP
  206.  
  207. The unrolled loop (section 3.1.1.8) is an example of the ability of evolution
  208. to produce an increase in complexity, gradually over a long period of time.
  209. The interesting thing about the loop unrolling optimization technique is that
  210. it requires more complex code.  The resulting creature has a genome size of 36,
  211. compared to its ancestor of size 80, yet it has packed a much more complex
  212. algorithm into less than half the space (Appendix E).
  213.  
  214. This is a classic example of intricate design in evolution.  One wonders how
  215. it could have arisen through random bit flips, as every component of the code
  216. must be in place in order for the algorithm to function.  Yet the code
  217. includes a classic mix of apparent intelligent design, and the chaotic hand
  218. of evolution.  The optimization technique is a very clever one invented by
  219. humans, yet it is implemented in a mixed up but functional style that no human
  220. would use (unless perhaps very intoxicated).
  221.  
  222. \LP
  223. \bf 4.3 EMERGENCE\rm
  224. \eLP
  225.  
  226. The ``physical'' environment presented by the simulator is quite simple,
  227. consisting of the energy resource (CPU time) doled out rather uniformly by
  228. the time slicer, and memory space which is completely uniform and always
  229. available.  In light of the nature of the physical environment, the implicit
  230. fitness function would presumably favor the evolution of creatures which are
  231. able to replicate with less CPU time, and this does in fact occur.  However,
  232. much of the evolution in the system consists of the creatures discovering ways
  233. to exploit one-another.  The creatures invent their own fitness functions
  234. through adaptation to their biotic (``living'') environment.  These ecological
  235. interactions are not programmed into the system, but emerge spontaneously as
  236. the creatures discover each other and invent their own games.
  237.  
  238. In the Tierran world, creatures which initially
  239. do not interact, discover means to exploit one another, and in response, means
  240. to avoid exploitation.  The original fitness landscape of the ancestor
  241. consists only of the efficiency parameters of the replication algorithm, in
  242. the context of the properties of the reaper and slicer queues.  When by
  243. chance, genotypes appear that exploit other creatures, selection acts to
  244. perfect the mechanisms of exploitation, and mechanisms of defense to that
  245. exploitation.  The original fitness landscape was based only on adaptations
  246. of the organism to its physical environment.  The
  247. new fitness landscape retains those features, but adds to it adaptations to
  248. the biotic environment, the other creatures.  Because the fitness landscape
  249. includes an ever increasing realm of adaptations to other creatures which
  250. are themselves evolving, it can facilitate an auto-catalytic increase in
  251. complexity and diversity of organisms.
  252.  
  253. Evolutionary theory suggests that adaptation to the biotic environment (other
  254. organisms) rather than to the physical environment is the primary force
  255. driving the auto-catalytic diversification of organisms (Stanley [34]).  It
  256. is encouraging to discover that the process has already begun in the Tierran
  257. world.  It is worth noting that the results presented here are based on
  258. evolution of the first creature that I designed, written in the first
  259. instruction set that I designed.  Comparison to the creatures that have
  260. evolved shows that the one I designed is not a particularly clever one.  Also,
  261. the instruction set that the creatures are based on is certainly not very
  262. powerful (apart from those special features incorporated to enhance its
  263. evolvability).  It would appear then that it is rather easy to create life.
  264. Evidently, virtual life is out there, waiting for us to provide environments
  265. in which it may evolve.
  266.  
  267. \LP
  268. \bf 4.4 SYNTHETIC BIOLOGY\rm
  269. \eLP
  270.  
  271. One of the most uncanny of evolutionary phenomena is the ecological convergence
  272. of biota living on different continents or in different epochs.  When a
  273. lineage of organisms undergoes an adaptive radiation (diversification),
  274. it leads to an array of relatively stable ecological forms.  The specific
  275. ecological forms are often recognizable from lineage to lineage.  For example
  276. among dinosaurs, the \it Pterosaur\rm, \it Triceratops\rm,
  277. \it Tyrannosaurus \rm and \it Ichthyosaur \rm
  278. are ecological parallels respectively, to the bat, rhinoceros, lion and
  279. porpoise of modern mammals.  Similarly, among modern placental mammals, the
  280. gray wolf, flying squirrel, great anteater and common mole are ecological
  281. parallels respectively, to the Tasmanian wolf, honey glider, banded anteater
  282. and marsupial mole of the marsupial mammals of Australia.
  283.  
  284. Given these evidently powerful convergent forces, it should perhaps not be
  285. surprising that as adaptive radiations proceed among digital organisms, we
  286. encounter recognizable ecological forms, in spite of the fundamentally
  287. distinct physics and chemistry on which they are based.  Ideally, comparisons
  288. should be made among organisms of comparable complexity.  It may not be
  289. appropriate to compare viruses to mammals.  Unfortunately, the organic
  290. creatures most comparable to digital organisms, the RNA creatures, are no
  291. longer with us.  Since digital organisms are being compared to modern organic
  292. creatures of much greater complexity, ecological comparisons must be made in
  293. the broadest of terms.
  294.  
  295. Trained biologists will tend to view synthetic life in the same terms that
  296. they have come to know organic life.  Having been trained as an ecologist
  297. and evolutionist, I have seen in my synthetic communities, many of the
  298. ecological and evolutionary properties that are well known from natural
  299. communities.  Biologists trained in other specialties will likely observe
  300. other familiar properties.  It seems that what we see is what we know.  It
  301. is likely to take longer before we appreciate the unique properties of these
  302. new life forms.
  303.  
  304. \LP
  305. \bf 4.5 FUTURE DIRECTIONS\rm
  306. \eLP
  307.  
  308. For the immediate future, my research will involve three main thrusts:
  309.  
  310. \bf Computational: \rm  The computational issue is how to design a computer
  311. architecutre and operating system that will support the natural evolution
  312. of \it machine code\rm .  Von Neumann style machine codes are considered to
  313. be brittle, in the sense that they are not robust to the genetic operations
  314. of mutation and recombination.  Any random change in a program is almost
  315. 100\% certain to break the program.
  316.  
  317. The most significant accomplishment of my work to date is finding a way to
  318. overcome this brittleness with only a slight modification of standard machine
  319. codes.  However, this success was achieved in the first attempt.  Therefore
  320. it is not known what features are essential for evolvability, and I
  321. certainly do not know what is the optimal architecture.
  322.  
  323. The primary computational objective then is to experiment with a large
  324. number of variations on the successful architecture in order to find the
  325. optimal balance of computational power and evolvability.  This work has
  326. begun but needs to be scaled up.
  327.  
  328. There are however, other important computational goals.  We must experiment
  329. with artificial selection on application programs.  So far all work has
  330. involved natural selection on ``wild'' algorithms that do no useful work.
  331. I want to develop an analog to genetic engineering, in which application
  332. codes are inserted into the genomes of digital organisms and evolved to
  333. greater optimality or new functionality.
  334.  
  335. It should be possible to develop cross-assemblers between Tierran architectures
  336. and real assembler languages.  Application code written and compiled to run on
  337. real machines could be cross-assembled into the new Tierran languages.  Each
  338. procedure could then be inserted into the genome of a creature.  Creatures
  339. could be rewarded with CPU time in proportion to the efficacy and efficiency
  340. of the evolving inserted code.  In this way, artificial selection would lead
  341. to the optimization of the inserted code, which could then be cross-assembled
  342. back into the real machine code.
  343.  
  344. If artificial selection of application programs proved to be practical, it
  345. would be worthwhile to render the best Tierran virtual instruction sets in
  346. silicon, thereby greatly accelerating the process.  At present, maximum
  347. optimization can be achieved in a few hours of running the Tierran virtual
  348. computer.  If a real computer were based on the architectural principals of
  349. the Tierran computer, the speed would be multiplied by about two orders of
  350. magnitude.  If the real machine were massively parallel, there could be
  351. additional gains of five to six orders of magnitude.  If machine code could
  352. evolve that quickly, then there is the possibility of using it as a generative
  353. process in addition to an optimization procedure.  There may also be some
  354. potential application in the areas of machine learning or adaptive programming.
  355.  
  356. Another long term objective is to use digital organisms evolving freely or
  357. under artificial selection, as a source of new paradigms for the programming
  358. of massively parallel machines.  The virtual computer that supports digital
  359. evolution is a parallel machine of the MIMD (multiple instruction multiple
  360. data) type.  One of the biggest problems facing computer science today is
  361. the development of techniques of parallel programming.  Digital organisms
  362. program themselves, using evolution.  They have discovered on their own, known
  363. programming techniques such as unrolling loops.  They will discover techniques
  364. that are naturally efficient on parallel machines, and we should be able
  365. to learn from their innovations.
  366.  
  367. The kinds of ecological interactions already
  368. observed in digital communities could in another light, be viewed as
  369. optimization techniques for parallel programming (e.g., the sharing of
  370. code fragments).  However, these interactions evolve in a ``jungle''-like
  371. environment where most interactions are of an adversarial nature.  When
  372. evolving large parallel application programs, the most viable model would
  373. be a multi-cellular one, where many cells would cooperate on a common
  374. problem.  A multi-cellular model is under development.  In the end, evolution
  375. may prove to be the best method of programming massively parallel machines.
  376.  
  377. \bf Biological: \rm  I plan to move the biological model ahead of its
  378. present state.  This will primarly involve the incorporation of facilities
  379. to support diploidy, organized sexuality, and multi-cellularity.  The
  380. methods for these advances have already been conceptually worked out, and
  381. the implementation has begun.  When these improvements are made, the long
  382. term biological goals are to use the model to test ecological and
  383. evolutionary theory, in such areas as: the evolution of sex, selection across
  384. hierarchical levels, and factors affecting diversity of ecological communities.
  385. It is hoped that it will be possible to engineer the system up to a condition
  386. analagous to the threshold of the Cambrian explosion of diversity, and then
  387. just allow the complexity and diversity of the digital system to explode
  388. spontaneously.
  389.  
  390. \bf Educational: \rm  I wish to distribute both source and executables
  391. for use as an educational and research tool.  However, some
  392. additional work is needed to make the program fully portable and to provide
  393. a user friendly graphic user interface.  This work is underway at a slow
  394. pace.
  395.  
  396. \LP
  397. \rule[6pt]{6.5in}{1pt}
  398. \large \bf 5 ACKNOWLEDGMENT\rm \normalsize
  399. \eLP
  400.  
  401. I thank Marc Cygnus, Robert Eisenberg, Doyne Farmer, Walter Fontana,
  402. Stephanie Forrest, Chris Langton, Dan Pirone, Stephen Pope, and
  403. Steen Rasmussen, for their discussions or readings of the manuscripts.
  404. I thank the Santa Fe Institute for their support.
  405. Contribution No.\ XXX from the Ecology Program, School
  406. of Life and Health Sciences, University of Delaware.
  407.  
  408. \newpage
  409.  
  410. \LP
  411. \rule[6pt]{6.5in}{1pt}
  412. \large \bf 6 REFERENCES\rm \normalsize
  413. \eLP
  414.  
  415. \XP
  416.  
  417. [1] Ackley, D. H. \& Littman, M. S.  ``Learning from natural
  418. selection in an artificial environment.''  In: \it Proceedings of the
  419. International Joint Conference on Neural Networks, Volume I, Theory Track,
  420. Neural and Cognitive Sciences Track\rm , IJCNN Winter 1990, Washington, DC.
  421. Hillsdale, New Jersey: Lawrence Erlbaum Associates, 1990.
  422.  
  423. [2] Aho, A. V., Hopcroft, J. E. \& Ullman, J. D.  \it The design and
  424. analysis of computer algorithms\rm .  Reading, Mass.: Addison-Wesley Publ.\
  425. Co, 1974.
  426.  
  427. [3] Bagley, R. J., Farmer, J. D., Kauffman, S. A., Packard, N. H., Perelson,
  428. A. S. \& Stadnyk, I. M.  ``Modeling adaptive biological systems.'' Unpublished
  429. paper, 1989.
  430.  
  431. [4] Barbieri, M.  \it The semantic theory of evolution\rm .  London:
  432. Harwood Academic Publishers, 1985.
  433.  
  434. [5] Cariani, P.  ``Emergence and artificial life.''  In: \it Artificial
  435. Life II\rm, edited by C. Langton, D. Farmer and S. Rasmussen.
  436. Redwood City, CA: Addison-Wesley, 1991, 000--000.
  437.  
  438. [6] Cohen, F.  \it Computer viruses: theory and experiments\rm .
  439. Ph.\ D. dissertation, U. of Southern California, 1984.
  440.  
  441. [7] Dawkins, R.  \it The blind watchmaker\rm .  New York: W. W. Norton
  442. \& Co., 1987.
  443.  
  444. [8] Dawkins, R.  ``The evolution of evolvability.''  In: \it Artificial life:
  445. proceedings of an interdisciplinary workshop on the synthesis and simulation
  446. of living systems\rm , edited by C. Langton.  Redwood City, CA:
  447. Addison-Wesley, 1989, 201--220.
  448.  
  449. [9] Denning, P. J.  ``Computer viruses.''  \it Amer.\ Sci.\ \bf 76 \rm
  450. (1988): 236--238.
  451.  
  452. [10] Dewdney, A. K.  ``Computer recreations:  In the game called Core
  453. War hostile programs engage in a battle of bits.''  \it Sci.\ Amer.\ \bf
  454. 250 \rm (1984): 14--22.
  455.  
  456. [11] Dewdney, A. K.  ``Computer recreations:  A core war bestiary of
  457. viruses, worms and other threats to computer memories.''  \it Sci.\ Amer.\ \bf
  458. 252 \rm (1985a): 14--23.
  459.  
  460. [12] Dewdney, A. K.  ``Computer recreations:  Exploring the field of
  461. genetic algorithms in a primordial computer sea full of flibs.''
  462. \it Sci.\ Amer.\ \bf 253 \rm (1985b): 21--32.
  463.  
  464. [13] Dewdney, A. K.  ``Computer recreations:  A program called MICE
  465. nibbles its way to victory at the first core war tournament.'' \it Sci.\
  466. Amer.\ \bf 256 \rm (1987): 14--20.
  467.  
  468. [14] Dewdney, A. K.  ``Of worms, viruses and core war.''
  469. \it Sci.\ Amer.\ \bf 260 \rm (1989): 110--113.
  470.  
  471. [15] Eldredge, N. \& Gould, S. J.  ``Punctuated equilibria: an alternative
  472. to phyletic gradualism.''  In: \it Models in Paleobiology\rm , edited by
  473. J. M. Schopf.  San Francisco: Greeman, Cooper, 1972, 82--115.
  474.  
  475. [16] Farmer, J. D., Kauffman, S. A., \& Packard, N. H.  ``Autocatalytic
  476. replication of polymers.''  \it Physica D \bf 22 \rm (1986): 50--67.
  477.  
  478. [17] Farmer, J. D. \& Belin, A.  ``Artificial life: the
  479. coming evolution.''  Proceedings in celebration of Murray Gell-Man's 60th
  480. Birthday.  Cambridge: University Press.  In press.
  481.  
  482. [18] Gould, S. J.  \it Wonderful life, the Burgess shale and the nature
  483. of history\rm .  New York: W. W. Norton \& Company, 1989.
  484.  
  485. [19] Gould, S. J. \& Eldredge, N.  ``Punctuated equilibria: the tempo and
  486. mode of evolution reconsidered.''  \it Paleobiology \bf 3 \rm (1977): 115--151.
  487.  
  488. [20] Holland, J. H.  \it Adaptation in natural and artificial systems:
  489. an introductory analysis with applications to biology, control, and
  490. artificial intelligence\rm .  Ann Arbor: Univ.\ of Michigan Press, 1975.
  491.  
  492. [21] Holland, J. H.  ``Studies of the spontaneous emergence of
  493. self-replicating systems using cellular automata and formal grammars.''
  494. In: \it Automata, Languages, Development\rm , edited by Lindenmayer, A.,
  495. \& Rozenberg, G.  New York: North-Holland, 1976, 385--404.
  496.  
  497. [22] Langton, C. G.  ``Studying artificial life with cellular automata.''
  498. \it Physica \bf 22D \rm (1986): 120--149.
  499.  
  500. [23] Langton, C. G.  ``Virtual state machines in cellular automata.''
  501. \it Complex Systems \bf 1 \rm (1987): 257--271.
  502.  
  503. [24] Langton, C. G.  ``Artificial life.''  In: \it Artificial life: proceedings
  504. of an interdisciplinary workshop on the synthesis and simulation of living
  505. systems\rm , edited by Langton, C.  Vol. 6 in the series: Santa Fe Institute
  506. studies in the sciences of complexity. Redwood City, CA: Addison-Wesley,
  507. 1989, 1--47.
  508.  
  509. [25] Lotka, A. J.  \it Elements of physical biology\rm .  Baltimore: Williams
  510. and Wilkins, 1925, reprinted as \it Elements of mathematical biology\rm ,
  511. Dover Press, 1956.
  512.  
  513. [26] Minsky, M. L.  \it Computation: finite and infinite machines\rm .
  514. Englewood Cliffs, N.J.: Prentice-Hall, 1976.
  515.  
  516. [27] Morris, S. C.  ``Burgess shale faunas and the cambrian explosion.''
  517. \it Science \bf 246 \rm (1989): 339--346.
  518.  
  519. [28] Paine, R. T.  ``Food web complexity and species diversity.''
  520. \it Am.\ Nat.\ \bf 100 \rm (1966): 65--75.
  521.  
  522. [29] Packard, N. H.  ``Intrinsic adaptation in a simple model for
  523. evolution.''  In: \it Artificial life: proceedings of an interdisciplinary
  524. workshop on the synthesis and simulation of living systems\rm , edited by C.
  525. Langton.  Redwood City, CA: Addison-Wesley, 1989, 141--155.
  526.  
  527. [30] Pattee, H. H.  ``Simulations, realizations, and theories of life.''
  528. In: \it Artificial life: proceedings of an interdisciplinary workshop on
  529. the synthesis and simulation of living systems\rm , edited by C. Langton.
  530. Redwood City, CA: Addison-Wesley, 1989, 63--77.
  531.  
  532. [31] Rasmussen, S., Knudsen, C., Feldberg, R. \& Hindsholm, M.  ``The
  533. coreworld: emergence and evolution of cooperative structures in a
  534. computational chemistry''  \it Physica D \bf 42 \rm (1990): 111--134.
  535.  
  536. [32] Rheingold, H.  (1988).  Computer viruses.  \it Whole Earth Review \bf
  537. Fall \rm (1988): 106.
  538.  
  539. [33] Spafford, E. H., Heaphy, K. A. \& Ferbrache, D. J.  \it Computer
  540. viruses, dealing with electronic vandalism and programmed threats\rm .
  541. ADAPSO, 1300 N. 17th Street, Suite 300, Arlington, VA 22209, 1989.
  542.  
  543. [34] Stanley, S. M.  ``An ecological theory for the sudden origin
  544. of multicellular life in the late precambrian.''  \it Proc.\ Nat.\ Acad.\
  545. Sci.\ \bf 70 \rm (1973): 1486--1489.
  546.  
  547. [35] Volterra, V.  ``Variations and fluctuations of the number of individuals
  548. in animal species living together.''  In: \it Animal Ecology\rm , edited by
  549. R. N. Chapman.  New York: McGraw-Hill, 1926, 409--448.
  550.  
  551. [36] Wilson, E. O. \& Bossert, W. H.  \it A primer of population
  552. biology\rm .  Stamford, Conn: Sinauer Associates, 1971.
  553. \eXP
  554.  
  555. \newpage
  556. % \addtocounter{page}{1}
  557.  
  558. \LP
  559. \bf Figure 1.  Metabolic flow chart for the ancestor, parasite, hyper-parasite,
  560. and their interactions: \rm ax, bx and cx refer to CPU registers where location
  561. and size information are stored.  [ax] and [bx] refer to locations in the
  562. soup indicated by the values in the ax and bx registers.  Patterns such as
  563. 1101 are complementary templates used for addressing.  Arrows outside of boxes
  564. indicate jumps in the flow of execution of the programs.  The dotted-line
  565. arrows indicate flow of execution between creatures.  The parasite lacks the
  566. copy procedure, however, if it is within the search limit of the copy
  567. procedure of a host, it can locate, call and execute that procedure, thereby
  568. obtaining the information needed to complete its replication.  The host is
  569. not adversely affected by this informational parasitism, except through
  570. competition with the parasite, which is a superior competitor.  Note that
  571. the parasite calls the copy procedure of its host with the expectation that
  572. control will return to the parasite when the copy procedure returns.  However,
  573. the hyper-parasite jumps out of the copy procedure rather than returning,
  574. thereby seizing control from the parasite.  It then proceeds to reset the CPU
  575. registers of the parasite with the location and size of the hyper-parasite,
  576. causing the parasite to replicate the hyper-parasite genome thereafter.
  577.  
  578. \newpage
  579. \addtocounter{page}{1}
  580.  
  581. \bf Figure 2.  Metabolic flow chart for social hyper-parasites, their
  582. associated hyper-hyper-parasite cheaters, and their interactions. \rm  Symbols
  583. are as described for Fig.\ 1.  Horizontal dashed lines indicate the boundaries
  584. between individual creatures.  On both the left and right, above the dashed
  585. line at the top of the figure is the lowermost fragment of a
  586. social-hyper-parasite.  Note (on the left) that neighboring social
  587. hyper-parasites cooperate in returning the flow of execution to the beginning
  588. of the creature for self-re-examination.  Execution jumps back to the end of
  589. the creature above, but then falls off the end of the creature without
  590. executing any instructions of consequence, and enters the top of the creature
  591. below.  On the right, a cheater is inserted between the two
  592. social-hyper-parasites.  The cheater captures control of execution when it
  593. passes between the social individuals.  It sets the CPU registers with its own
  594. location and size, and then skips over the self-examination step when it
  595. returns control of execution to the social creature below.
  596.  
  597. \newpage
  598. \addtocounter{page}{1}
  599.  
  600. \bf Figure 3.  Metabolic flow chart for obligate symbionts and their
  601. interactions. \rm  Symbols are as described for Fig.\ 1.  Neither creature is
  602. able to self-replicate in isolation.  However, when cultured together, each
  603. is able to replicate by using information provided by the other.
  604.  
  605. \newpage
  606. \addtocounter{page}{1}
  607.  
  608. \bf Figure 4.  Evolutionary optimization at eight sets of mutation rates. \rm
  609. In each run, the three mutation rates: move mutations (copy error), flaws
  610. and background mutations (cosmic rays) are set relative to the generation
  611. time.  In each case, the background mutation rate is the lowest, affecting
  612. a cell once in twice as many generations as the move mutation rate.  The
  613. flaw rate is intermediate, affecting a cell once in 1.5 times as many
  614. generations as the move mutation rate.  For example in one run, the move
  615. mutation will affect a cell line on the average once every 4 generations,
  616. the flaw will occur once every 6 generations, and the background mutation
  617. once every 8 generations.  The horizontal axis shows elapsed time in
  618. hundreds of millions of instructions executed by the system.  The vertical
  619. axis shows genome size in instructions.  Each point indicates the first
  620. appearance of a new genotype which crossed the abundance thresholds of
  621. either 2\% of the population of cells in the soup, or occupation of 2\% of
  622. the memory.  The number of generations per move mutation is indicated by
  623. a number in the upper right hand corner of each graph.
  624.  
  625. \newpage
  626. \addtocounter{page}{3}
  627.  
  628. \bf Figure 5.  Variation in evolutionary optimization under constant
  629. conditions. \rm  Based on a mutation rate of four generations per move
  630. mutation, all other parameters as in Fig.\ 4.  The plots are otherwise
  631. as described for Fig.\ 4.
  632.  
  633. \newpage
  634. \addtocounter{page}{1}
  635.  
  636. Table 1:  Genebank.  Table of numbers of size classes in the genebank.  Left
  637. column is size class, right column is number of self-replicating genotypes
  638. of that size class.  305 sizes, 29,275 genotypes.
  639. \eLP
  640.  
  641. \begin{verbatim}
  642. 0034 1       0092 362     0150 2       0205 5       0418 1       5213 2
  643. 0041 2       0093 261     0151 1       0207 3       0442 10      5229 4
  644. 0043 12      0094 241     0152 2       0208 2       0443 1       5254 1
  645. 0044 7       0095 211     0153 1       0209 1       0444 61      5888 36
  646. 0045 191     0096 232     0154 2       0210 9       0445 1       5988 1
  647. 0046 7       0097 173     0155 3       0211 4       0456 2       6006 2
  648. 0047 5       0098 92      0156 77      0212 4       0465 6       6014 1
  649. 0048 4       0099 117     0157 270     0213 5       0472 6       6330 1
  650. 0049 8       0100 77      0158 938     0214 47      0483 1       6529 1
  651. 0050 13      0101 62      0159 836     0218 1       0484 8       6640 1
  652. 0051 2       0102 62      0160 3229    0219 1       0485 3       6901 5
  653. 0052 11      0103 27      0161 1417    0220 2       0486 9       6971 1
  654. 0053 4       0104 25      0162 174     0223 3       0487 2       7158 2
  655. 0054 2       0105 28      0163 187     0226 2       0493 2       7293 3
  656. 0055 2       0106 19      0164 46      0227 7       0511 2       7331 1
  657. 0056 4       0107 3       0165 183     0231 1       0513 1       7422 70
  658. 0057 1       0108 8       0166 81      0232 1       0519 1       7458 1
  659. 0058 8       0109 2       0167 71      0236 1       0522 6       7460 7
  660. 0059 8       0110 8       0168 9       0238 1       0553 1       7488 1
  661. 0060 3       0111 71      0169 15      0240 3       0568 6       7598 1
  662. 0061 1       0112 19      0170 99      0241 1       0578 1       7627 63
  663. 0062 2       0113 10      0171 40      0242 1       0581 3       7695 1
  664. 0063 2       0114 3       0172 44      0250 1       0582 1       7733 1
  665. 0064 1       0115 3       0173 34      0251 1       0600 1       7768 2
  666. 0065 4       0116 5       0174 15      0260 2       0683 1       7860 25
  667. 0066 1       0117 3       0175 22      0261 1       0689 1       7912 1
  668. 0067 1       0118 1       0176 137     0265 2       0757 6       8082 3
  669. 0068 2       0119 3       0177 13      0268 1       0804 2       8340 1
  670. 0069 1       0120 2       0178 3       0269 1       0813 1       8366 1
  671. 0070 7       0121 60      0179 1       0284 16      0881 6       8405 5
  672. 0071 5       0122 9       0180 16      0306 1       0888 1       8406 2
  673. 0072 17      0123 3       0181 5       0312 1       0940 2       8649 2
  674. 0073 2       0124 11      0182 27      0314 1       1006 6       8750 1
  675. 0074 80      0125 6       0184 3       0316 2       1016 1       8951 1
  676. 0075 56      0126 11      0185 21      0318 3       1077 5       8978 3
  677. 0076 21      0127 1       0186 9       0319 2       1116 1       9011 3
  678. 0077 28      0130 3       0187 3       0320 23      1186 1       9507 3
  679. 0078 409     0131 2       0188 11      0321 5       1294 7       9564 3
  680. 0079 850     0132 5       0190 20      0322 21      1322 7       9612 1
  681. 0080 7399    0133 2       0192 12      0330 1       1335 1       9968 1
  682. 0081 590     0134 7       0193 4       0342 5       1365 11     10259 31
  683. 0082 384     0135 1       0194 4       0343 1       1631 1      10676 1
  684. 0083 886     0136 1       0195 11      0351 1       1645 3      11366 5
  685. 0084 1672    0137 1       0196 19      0352 3       2266 1      11900 1
  686. 0085 1531    0138 1       0197 2       0386 1       2615 2      12212 2
  687. 0086 901     0139 2       0198 3       0388 2       2617 9      15717 3
  688. 0087 944     0141 6       0199 35      0401 3       2671 7      16355 1
  689. 0088 517     0143 1       0200 1       0407 1       3069 3      17356 3
  690. 0089 449     0144 4       0201 84      0411 22      4241 1      18532 1
  691. 0090 543     0146 1       0203 1       0412 3       5101 15     23134 14
  692. 0091 354     0149 1       0204 1       0416 1       5157 9
  693. \end{verbatim}
  694.  
  695. \newpage
  696.  
  697. \baselineskip = 14pt
  698. \LP
  699. \bf APPENDIX A\rm
  700. \eLP
  701.  
  702. Structure definition to implement the Tierra virtual CPU.
  703. The complete source code for the Tierra Simulator can be obtained by
  704. contacting the author by email.
  705.  
  706. \begin{verbatim}
  707. struct cpu {  /* structure for registers of virtual cpu */
  708.     int   ax;  /* address register */
  709.     int   bx;  /* address register */
  710.     int   cx;  /* numerical register */
  711.     int   dx;  /* numerical register */
  712.     char  fl;  /* flag */
  713.     char  sp;  /* stack pointer */
  714.     int   st[10];  /* stack */
  715.     int   ip;  /* instruction pointer */
  716.     } ;
  717. \end{verbatim}
  718.  
  719. \LP
  720. \bf APPENDIX B\rm
  721. \eLP
  722.  
  723. Abbreviated code for implementing the CPU cycle of the Tierra Simulator.
  724.  
  725. \begin{verbatim}
  726. void main(void)
  727. {   get_soup();
  728.     life();
  729.     write_soup();
  730. }
  731.  
  732. void life(void) /* doles out time slices and death */
  733. {   while(inst_exec_c < alive)  /* control the length of the run */
  734.     {   time_slice(this_slice); /* this_slice is current cell in queue */
  735.         incr_slice_queue(); /* increment this_slice to next cell in queue */
  736.         while(free_mem_current < free_mem_prop * soup_size)
  737.             reaper(); /* if memory is full to threshold, reap some cells */
  738.     }
  739. }
  740.  
  741. void time_slice(int  ci)
  742. {   Pcells  ce; /* pointer to the array of cell structures */
  743.     char    i;  /* instruction from soup */
  744.     int     di; /* decoded instruction */
  745.     int     j, size_slice;
  746.     ce = cells + ci;
  747.     for(j = 0; j < size_slice; j++)
  748.     {   i = fetch(ce->c.ip); /* fetch instruction from soup, at address ip */
  749.         di = decode(i);      /* decode the fetched instruction */
  750.         execute(di, ci);     /* execute the decoded instruction */
  751.         increment_ip(di,ce); /* move instruction pointer to next instruction */
  752.         system_work(); /* opportunity to extract information */
  753.     }
  754. }
  755.  
  756. void execute(int  di, int  ci)
  757. {   switch(di)
  758.     {   case 0x00: nop_0(ci);    break; /* no operation */
  759.         case 0x01: nop_1(ci);    break; /* no operation */
  760.         case 0x02: or1(ci);      break; /* flip low order bit of cx, cx ^= 1 */
  761.         case 0x03: shl(ci);      break; /* shift left cx register, cx <<= 1 */
  762.         case 0x04: zero(ci);     break; /* set cx register to zero, cx = 0 */
  763.         case 0x05: if_cz(ci);    break; /* if cx==0 execute next instruction */
  764.         case 0x06: sub_ab(ci);   break; /* subtract bx from ax, cx = ax - bx */
  765.         case 0x07: sub_ac(ci);   break; /* subtract cx from ax, ax = ax - cx */
  766.         case 0x08: inc_a(ci);    break; /* increment ax, ax = ax + 1 */
  767.         case 0x09: inc_b(ci);    break; /* increment bx, bx = bx + 1 */
  768.         case 0x0a: dec_c(ci);    break; /* decrement cx, cx = cx - 1 */
  769.         case 0x0b: inc_c(ci);    break; /* increment cx, cx = cx + 1 */
  770.         case 0x0c: push_ax(ci);  break; /* push ax on stack */
  771.         case 0x0d: push_bx(ci);  break; /* push bx on stack */
  772.         case 0x0e: push_cx(ci);  break; /* push cx on stack */
  773.         case 0x0f: push_dx(ci);  break; /* push dx on stack */
  774.         case 0x10: pop_ax(ci);   break; /* pop top of stack into ax */
  775.         case 0x11: pop_bx(ci);   break; /* pop top of stack into bx */
  776.         case 0x12: pop_cx(ci);   break; /* pop top of stack into cx */
  777.         case 0x13: pop_dx(ci);   break; /* pop top of stack into dx */
  778.         case 0x14: jmp(ci);      break; /* move ip to template */
  779.         case 0x15: jmpb(ci);     break; /* move ip backward to template */
  780.         case 0x16: call(ci);     break; /* call a procedure */
  781.         case 0x17: ret(ci);      break; /* return from a procedure */
  782.         case 0x18: mov_cd(ci);   break; /* move cx to dx, dx = cx */
  783.         case 0x19: mov_ab(ci);   break; /* move ax to bx, bx = ax */
  784.         case 0x1a: mov_iab(ci);  break; /* move instruction at address in bx
  785.                                            to address in ax */
  786.         case 0x1b: adr(ci);      break; /* address of nearest template to ax */
  787.         case 0x1c: adrb(ci);     break; /* search backward for template */
  788.         case 0x1d: adrf(ci);     break; /* search forward for template */
  789.         case 0x1e: mal(ci);      break; /* allocate memory for daughter cell */
  790.         case 0x1f: divide(ci);   break; /* cell division */
  791.     }
  792.     inst_exec_c++;
  793. }
  794. \end{verbatim}
  795. \newpage
  796. \LP
  797. \bf APPENDIX C\rm
  798. \eLP
  799.  
  800. Assembler source code for the ancestral creature.
  801.  
  802. \begin{verbatim}
  803. genotype: 80 aaa  origin: 1-1-1990  00:00:00:00  ancestor
  804. parent genotype: human
  805. 1st_daughter:  flags: 0  inst: 839  mov_daught: 80
  806. 2nd_daughter:  flags: 0  inst: 813  mov_daught: 80
  807.  
  808. nop_1    ; 01   0 beginning template
  809. nop_1    ; 01   1 beginning template
  810. nop_1    ; 01   2 beginning template
  811. nop_1    ; 01   3 beginning template
  812. zero     ; 04   4 put zero in cx
  813. or1      ; 02   5 put 1 in first bit of cx
  814. shl      ; 03   6 shift left cx
  815. shl      ; 03   7 shift left cx, now cx = 4
  816.          ;        ax =                 bx =
  817.          ;        cx = template size   dx =
  818. mov_cd   ; 18   8 move template size to dx
  819.          ;        ax =                 bx =
  820.          ;        cx = template size   dx = template size
  821. adrb     ; 1c   9 get (backward) address of beginning template
  822. nop_0    ; 00  10 compliment to beginning template
  823. nop_0    ; 00  11 compliment to beginning template
  824. nop_0    ; 00  12 compliment to beginning template
  825. nop_0    ; 00  13 compliment to beginning template
  826.          ;        ax = start of mother + 4   bx =
  827.          ;        cx = template size         dx = template size
  828. sub_ac   ; 07  14 subtract cx from ax
  829.          ;        ax = start of mother   bx =
  830.          ;        cx = template size     dx = template size
  831. mov_ab   ; 19  15 move start address to bx
  832.          ;        ax = start of mother   bx = start of mother
  833.          ;        cx = template size     dx = template size
  834. adrf     ; 1d  16 get (forward) address of end template
  835. nop_0    ; 00  17 compliment to end template
  836. nop_0    ; 00  18 compliment to end template
  837. nop_0    ; 00  19 compliment to end template
  838. nop_1    ; 01  20 compliment to end template
  839.          ;        ax = end of mother   bx = start of mother
  840.          ;        cx = template size   dx = template size
  841. inc_a    ; 08  21 to include dummy statement to separate creatures
  842. sub_ab   ; 06  22 subtract start address from end address to get size
  843.          ;        ax = end of mother    bx = start of mother
  844.          ;        cx = size of mother   dx = template size
  845. nop_1    ; 01  23 reproduction loop template
  846. nop_1    ; 01  24 reproduction loop template
  847. nop_0    ; 00  25 reproduction loop template
  848. nop_1    ; 01  26 reproduction loop template
  849. mal      ; 1e  27 allocate memory for daughter cell, address to ax
  850.          ;        ax = start of daughter    bx = start of mother
  851.          ;        cx = size of mother       dx = template size
  852. call     ; 16  28 call template below (copy procedure)
  853. nop_0    ; 00  29 copy procedure compliment
  854. nop_0    ; 00  30 copy procedure compliment
  855. nop_1    ; 01  31 copy procedure compliment
  856. nop_1    ; 01  32 copy procedure compliment
  857. divide   ; 1f  33 create independent daughter cell
  858. jmp      ; 14  34 jump to template below (reproduction loop, above)
  859. nop_0    ; 00  35 reproduction loop compliment
  860. nop_0    ; 00  36 reproduction loop compliment
  861. nop_1    ; 01  37 reproduction loop compliment
  862. nop_0    ; 00  38 reproduction loop compliment
  863. if_cz    ; 05  39 this is a dummy instruction to separate templates
  864.          ;        begin copy procedure
  865. nop_1    ; 01  40 copy procedure template
  866. nop_1    ; 01  41 copy procedure template
  867. nop_0    ; 00  42 copy procedure template
  868. nop_0    ; 00  43 copy procedure template
  869. push_ax  ; 0c  44 push ax onto stack
  870. push_bx  ; 0d  45 push bx onto stack
  871. push_cx  ; 0e  46 push cx onto stack
  872. nop_1    ; 01  47 copy loop template
  873. nop_0    ; 00  48 copy loop template
  874. nop_1    ; 01  49 copy loop template
  875. nop_0    ; 00  50 copy loop template
  876. mov_iab  ; 1a  51 move contents of [bx] to [ax]
  877. dec_c    ; 0a  52 decrement cx
  878. if_cz    ; 05  53 if cx == 0 perform next instruction, otherwise skip it
  879. jmp      ; 14  54 jump to template below (copy procedure exit)
  880. nop_0    ; 00  55 copy procedure exit compliment
  881. nop_1    ; 01  56 copy procedure exit compliment
  882. nop_0    ; 00  57 copy procedure exit compliment
  883. nop_0    ; 00  58 copy procedure exit compliment
  884. inc_a    ; 08  59 increment ax
  885. inc_b    ; 09  60 increment bx
  886. jmp      ; 14  61 jump to template below (copy loop)
  887. nop_0    ; 00  62 copy loop compliment
  888. nop_1    ; 01  63 copy loop compliment
  889. nop_0    ; 00  64 copy loop compliment
  890. nop_1    ; 01  65 copy loop compliment
  891. if_cz    ; 05  66 this is a dummy instruction, to separate templates
  892. nop_1    ; 01  67 copy procedure exit template
  893. nop_0    ; 00  68 copy procedure exit template
  894. nop_1    ; 01  69 copy procedure exit template
  895. nop_1    ; 01  70 copy procedure exit template
  896. pop_cx   ; 12  71 pop cx off stack
  897. pop_bx   ; 11  72 pop bx off stack
  898. pop_ax   ; 10  73 pop ax off stack
  899. ret      ; 17  74 return from copy procedure
  900. nop_1    ; 01  75 end template
  901. nop_1    ; 01  76 end template
  902. nop_1    ; 01  77 end template
  903. nop_0    ; 00  78 end template
  904. if_cz    ; 05  79 dummy statement to separate creatures
  905. \end{verbatim}
  906. \newpage
  907. \LP
  908. \bf APPENDIX D\rm
  909. \eLP
  910.  
  911. Assembler source code for the smallest self-replicating creature.
  912.  
  913. \begin{verbatim}
  914. genotype: 0022abn  parent genotype: 0022aak
  915. 1st_daughter:  flags: 1  inst: 146  mov_daught: 22  breed_true: 1
  916. 2nd_daughter:  flags: 0  inst: 142  mov_daught: 22  breed_true: 1
  917. InstExecC: 437  InstExec: 625954  origin: 662865379  Wed Jan  2 20:16:19 1991
  918. MaxPropPop: 0.1231  MaxPropInst: 0.0568
  919.  
  920. nop_0   ; 00   0
  921. adrb    ; 1c   1 find beginning
  922. nop_1   ; 01   2
  923. divide  ; 1f   3 fails the first time it is executed
  924. sub_ac  ; 07   4
  925. mov_ab  ; 19   5
  926. adrf    ; 1d   6 find end
  927. nop_0   ; 00   7
  928. inc_a   ; 08   8 to include final dummy statement
  929. sub_ab  ; 06   9 calculate size
  930. mal     ; 1e  10
  931. push_bx ; 0d  11 save beginning address on stack in order to `return' there
  932. nop_0   ; 00  12 top of copy loop
  933. mov_iab ; 1a  13
  934. dec_c   ; 0a  14
  935. if_cz   ; 05  15
  936. ret     ; 17  16 jump to beginning, address saved on stack
  937. inc_a   ; 08  17
  938. inc_b   ; 09  18
  939. jmpb    ; 15  19 bottom of copy loop (6 instructions executed per loop)
  940. nop_1   ; 01  20
  941. mov_iab ; 1a  21 dummy statement to terminate template
  942. \end{verbatim}
  943.  
  944. \newpage
  945. \LP
  946. \bf APPENDIX E\rm
  947. \eLP
  948.  
  949. Assembler code for the central copy loop of the ancestor
  950. (80aaa) and decendant after fifteen billion instructions (72etq).  Within
  951. the loop, the ancestor does each of the following operations once: copy
  952. instruction (51), decrement cx (52), increment ax (59) and increment bx (60).
  953. The decendant performs each of the following operations three times within
  954. the loop: copy instruction (15, 22, 26), increment ax (20, 24, 31) and
  955. increment bx (21, 25, 32).  The decrement cx operation occurs five times
  956. within the loop (16, 17, 19, 23, 27).  Instruction 28 flips the low order
  957. bit of the cx register.  Whenever this latter instruction is reached, the
  958. value of the low order bit is one, so this amounts to a sixth instance of
  959. decrement cx.  This means that there are two decrements for every increment.
  960. The reason for this is related to another adaptation of this creature.  When
  961. it calculates its size, it shifts left (12) before allocating space for the
  962. daughter (13).  This has the effect of allocating twice as much space as
  963. is actually needed to accomodate the genome.  The genome of the creature
  964. is 36 instructions long, but it allocates a space of 72 instructions.
  965. This occurred in an environment where the slice size was set equal to the
  966. size of the cell.  In this way the creatures were able to garner twice as
  967. much energy.  However, they had to compliment this change by doubling the
  968. number of decrements in the loop.
  969.  
  970. \newpage
  971.  
  972. \begin{verbatim}
  973. nop_1    ; 01  47 copy loop template      COPY LOOP OF 80AAA
  974. nop_0    ; 00  48 copy loop template
  975. nop_1    ; 01  49 copy loop template
  976. nop_0    ; 00  50 copy loop template
  977. mov_iab  ; 1a  51 move contents of [bx] to [ax] (copy instruction)
  978. dec_c    ; 0a  52 decrement cx
  979. if_cz    ; 05  53 if cx = 0 perform next instruction, otherwise skip it
  980. jmp      ; 14  54 jump to template below (copy procedure exit)
  981. nop_0    ; 00  55 copy procedure exit compliment
  982. nop_1    ; 01  56 copy procedure exit compliment
  983. nop_0    ; 00  57 copy procedure exit compliment
  984. nop_0    ; 00  58 copy procedure exit compliment
  985. inc_a    ; 08  59 increment ax (point to next instruction of daughter)
  986. inc_b    ; 09  60 increment bx (point to next instruction of mother)
  987. jmp      ; 14  61 jump to template below (copy loop)
  988. nop_0    ; 00  62 copy loop compliment
  989. nop_1    ; 01  63 copy loop compliment
  990. nop_0    ; 00  64 copy loop compliment
  991. nop_1    ; 01  65 copy loop compliment (10 instructions executed per loop)
  992.  
  993.  
  994. shl     ; 000 03  12 shift left cx        COPY LOOP OF 72ETQ
  995. mal     ; 000 1e  13 allocate daughter cell
  996. nop_0   ; 000 00  14 top of loop
  997. mov_iab ; 000 1a  15 copy instruction
  998. dec_c   ; 000 0a  16 decrement cx
  999. dec_c   ; 000 0a  17 decrement cx
  1000. jmpb    ; 000 15  18 junk
  1001. dec_c   ; 000 0a  19 decrement cx
  1002. inc_a   ; 000 08  20 increment ax
  1003. inc_b   ; 000 09  21 increment bx
  1004. mov_iab ; 000 1a  22 copy instruction
  1005. dec_c   ; 000 0a  23 decrement cx
  1006. inc_a   ; 000 08  24 increment ax
  1007. inc_b   ; 000 09  25 increment bx
  1008. mov_iab ; 000 1a  26 copy instruction
  1009. dec_c   ; 000 0a  27 decrement cx
  1010. or1     ; 000 02  28 flip low order bit of cx
  1011. if_cz   ; 000 05  29 if cx == 0 do next instruction
  1012. ret     ; 000 17  30 exit loop
  1013. inc_a   ; 000 08  31 increment ax
  1014. inc_b   ; 000 09  32 increment bx
  1015. jmpb    ; 000 15  33 go to top of loop (6 instructions per copy)
  1016. nop_1   ; 000 01  34 bottom of loop    (18 instructions executed per loop)
  1017. \end{verbatim}
  1018.  
  1019. \end{document}
  1020.